{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "nbpresent": {
     "id": "8a523017-d8fe-42ed-a673-4abc958439ed"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import claude.utils as cu\n",
    "from claude.tx import qammod\n",
    "from claude.models.NLIN import defaultParameters,\\\n",
    "                               calcConstants,\\\n",
    "                               calcNLIN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "nbpresent": {
     "id": "5dc3f7bc-7f8f-4f58-bd81-77d6a839fd13"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nPol:\t2\n",
      "lambda_:\t1.55003597538907e-06\n",
      "Fc:\t193410000000000.0\n",
      "D:\t16.464\n",
      "alpha:\t0.2\n",
      "beta2:\t2.0999953937404486e-26\n",
      "gamma:\t1.3\n",
      "nSpans:\t20\n",
      "spanLength:\t100\n",
      "noiseFigure:\t5\n",
      "PdBm:\t1\n",
      "Rs:\t32\n",
      "channels:\t[-100.  -50.    0.   50.  100.]\n",
      "nChannels:\t5\n",
      "chSpacing:\t50\n",
      "kur:\t1.3809523809523807\n",
      "kur3:\t2.225785552316164\n",
      "N_mc:\t1000000\n",
      "PD:\t0\n",
      "M:\t64\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# System parameters\n",
    "param = defaultParameters()\n",
    "param.nSpans = 20\n",
    "\n",
    "param.M = 64\n",
    "constellation = qammod(param.M)\n",
    "\n",
    "power = np.mean(np.abs(constellation)**2)\n",
    "param.kur  = np.mean(np.abs(constellation)**4) / power**2\n",
    "param.kur3 = np.mean(np.abs(constellation)**6) / power**3\n",
    "\n",
    "print( param )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "nbpresent": {
     "id": "5d49379c-b517-4e20-9a28-ebd84906a42a"
    }
   },
   "outputs": [],
   "source": [
    "# Calculate System constants\n",
    "# Calculate Add terms\n",
    "aseNoisePower, interConst, intraConst, interConstAdd, intraConstAdd = calcConstants(param)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# QAM\n",
    "powerSweep = np.arange(-10, 4, 0.5)\n",
    "NLINeffSNR = powerSweep - calcNLIN(param, powerSweep, aseNoisePower, interConst, intraConst, interConstAdd, intraConstAdd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Nonlinear Wizard http://nlinwizard.eng.tau.ac.il\n",
    "wizard_powerSweep = [-10, -8, -6,-4, -2, 0, 2, 4]\n",
    "wizard_effSNR = [5.91, 7.90, 9.88, 11.80, 13.49, 14.43, 13.73, 11.20]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fehenberger GN https://www.fehenberger.de/#sourcecode\n",
    "fehen_powerSweep = [-10, -8, -6, -4, -2, 0, 2, 4]\n",
    "fehen_effSNR = [5.9016, 7.8922, 9.8550, 11.7102, 13.1774, 13.5348, 12.0059, 8.9346]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "nbpresent": {
     "id": "e8d1dac0-05b8-44c6-9e0a-bc7393fb1289"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(powerSweep, NLINeffSNR,'b')\n",
    "plt.plot(wizard_powerSweep, wizard_effSNR,'bx')\n",
    "plt.plot(fehen_powerSweep, fehen_effSNR,'rx')\n",
    "plt.title('Power [dBm] VS effective SNR')\n",
    "plt.xlabel('Power [dBm]')\n",
    "plt.ylabel('effective SNR [dB]')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
